package cn.tedu.csmall.product.service.impl;

import cn.tedu.csmall.product.mapper.SkuMapper;
import cn.tedu.csmall.product.mapper.SpuMapper;
import cn.tedu.csmall.product.pojo.entity.SKU;
import cn.tedu.csmall.product.pojo.param.SkuAddNewParam;
import cn.tedu.csmall.product.pojo.vo.SkuListItemVO;
import cn.tedu.csmall.product.pojo.vo.SpuStandardVO;
import cn.tedu.csmall.product.service.ISkuService;
import com.example.csmall.commons.ex.ServiceException;
import com.example.csmall.commons.web.ServiceCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Random;

/**
 * 处理SKU的业务实现类
 *
 * @author java@tedu.cn
 * @version 0.0.1
 */
@Slf4j
@Service
public class SkuServiceImpl implements ISkuService {

    @Autowired
    private SkuMapper skuMapper;
    @Autowired
    private SpuMapper spuMapper;


    @Override
    public void addNew(SkuAddNewParam skuAddNewParam) {
        log.debug("开始处理【新增SKU】的业务，参数：{}", skuAddNewParam);
        // 检查SPU是否存在
        Long spuId = skuAddNewParam.getSpuId();
        SpuStandardVO spu = spuMapper.getStandardById(spuId);
        if (spu == null) {
            String message = "新增SKU失败，SPU数据不存在！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }
        // 获取SKU ID
        Long skuId = new Random().nextLong();

        // 创建SKu对象
        SKU sku = new SKU();
        // 复制属性值
        BeanUtils.copyProperties(skuAddNewParam, sku);
        // 补全属性值：id >>> 暂时随便写
        sku.setId(skuId);
        // 补全属性值
        sku.setAttributeTemplateId(spu.getAttributeTemplateId());
        sku.setAlbumId(spu.getAlbumId());
        sku.setPictures(spu.getPictures());
        sku.setSales(0);
        sku.setCommentCount(0);
        sku.setPositiveCommentCount(0);
        // 插入SKu数据
        int rows = skuMapper.insert(sku);
        if (rows != 1) {
            String message = "新增SKU失败，服务器忙，请稍后再尝试！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_INSERT, message);
        }


    }


    @Override
    public List<SkuListItemVO> listBySpuId(Long spuId) {
        log.debug("开始处理【根据SPUID查询SKU列表】的业务，参数：SPUID{}", spuId);
        List<SkuListItemVO> skuList = skuMapper.listBySpuId(spuId);
        return skuList;
    }
}
